import pandas as pd
import numpy as np
import seaborn as sns
from datetime import datetime
from matplotlib import pyplot as plt
from pandas_profiling import ProfileReport
from plotly import express as px
from datetime import datetime as dt
import json
# Lendo a base de dados.
data_in = pd.read_csv('../data/raw/data_regiao_hidro.csv', header=[0])
# Lendo arquivo com o formato das regioes hidrograficas
with open('../data/raw/bacias_hidro.json') as file:
baciasCE = json.load(file)
# Gerando um dataframe com a base de dados.
df = pd.DataFrame(data_in)
df.head()
| data | posicao | pr | divergencia | umidade | vento_vertical | vorticidade | fluxo_energia | EMI | nino3 | atn | ats | atlgrad | atl3 | seta | nesta | regiao_hidro | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1981-01-01 | (-4.75, -39.25) | 68.92 | -0.000003 | 74.14 | -0.01 | 0.000007 | 93.54 | 0.49 | -0.63 | 0.28 | -0.22 | 0.5 | -0.32 | -0.21 | 0.14 | Bacia_Metropolitana |
| 1 | 1981-01-01 | (-4.75, -39.0) | 59.98 | -0.000004 | 73.94 | -0.02 | 0.000008 | 120.53 | 0.49 | -0.63 | 0.28 | -0.22 | 0.5 | -0.32 | -0.21 | 0.14 | Bacia_Metropolitana |
| 2 | 1981-01-01 | (-4.75, -38.75) | 54.32 | -0.000004 | 73.52 | -0.03 | 0.000011 | 75.55 | 0.49 | -0.63 | 0.28 | -0.22 | 0.5 | -0.32 | -0.21 | 0.14 | Bacia_Metropolitana |
| 3 | 1981-01-01 | (-4.75, -38.5) | 34.91 | -0.000004 | 73.19 | -0.02 | 0.000014 | 24.54 | 0.49 | -0.63 | 0.28 | -0.22 | 0.5 | -0.32 | -0.21 | 0.14 | Bacia_Metropolitana |
| 4 | 1981-01-01 | (-4.5, -39.0) | 60.35 | -0.000003 | 74.28 | 0.07 | 0.000006 | 81.54 | 0.49 | -0.63 | 0.28 | -0.22 | 0.5 | -0.32 | -0.21 | 0.14 | Bacia_Metropolitana |
# Formata o nome das regiões hidrográficas para coincidir com os do Json (arquivo com os shapes das regiões) e separa posição em Lat e Lon.
df = df.assign(
regiao_hidro = df.regiao_hidro.apply(lambda x: x.replace("_", " ")),
lat = df.posicao.apply(lambda x: eval(x)[0]),
lon = df.posicao.apply(lambda x: eval(x)[1])
).drop([], )
# Transformando a data em datetime.
pd.to_datetime(df['data'], format="%Y-%m-%d")
0 1981-01-01
1 1981-01-01
2 1981-01-01
3 1981-01-01
4 1981-01-01
...
96325 2022-02-01
96326 2022-02-01
96327 2022-02-01
96328 2022-02-01
96329 2022-02-01
Name: data, Length: 96330, dtype: datetime64[ns]
# Selecionando as variaveis a serem trabalhadas.
df_reduced = df[['data','posicao','pr','umidade','regiao_hidro', 'nino3', 'atlgrad','vento_vertical','lat','lon']]
df_reduced = df_reduced.set_index(['data'])
df_reduced.dtypes
posicao object pr float64 umidade float64 regiao_hidro object nino3 float64 atlgrad float64 vento_vertical float64 lat float64 lon float64 dtype: object
# Selecionando o periodo de tempo a ser utilizado como treino.
df_reduced = df_reduced['1981-01':'2010-12']
# Criando colunas de mes e ano para analises.
df_reduced['ano'] = pd.to_datetime(df_reduced.index).strftime("%Y")
df_reduced['mes'] = pd.to_datetime(df_reduced.index).strftime("%m")
df_reduced.head()
| posicao | pr | umidade | regiao_hidro | nino3 | atlgrad | vento_vertical | lat | lon | ano | mes | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| data | |||||||||||
| 1981-01-01 | (-4.75, -39.25) | 68.92 | 74.14 | Bacia Metropolitana | -0.63 | 0.5 | -0.01 | -4.75 | -39.25 | 1981 | 01 |
| 1981-01-01 | (-4.75, -39.0) | 59.98 | 73.94 | Bacia Metropolitana | -0.63 | 0.5 | -0.02 | -4.75 | -39.00 | 1981 | 01 |
| 1981-01-01 | (-4.75, -38.75) | 54.32 | 73.52 | Bacia Metropolitana | -0.63 | 0.5 | -0.03 | -4.75 | -38.75 | 1981 | 01 |
| 1981-01-01 | (-4.75, -38.5) | 34.91 | 73.19 | Bacia Metropolitana | -0.63 | 0.5 | -0.02 | -4.75 | -38.50 | 1981 | 01 |
| 1981-01-01 | (-4.5, -39.0) | 60.35 | 74.28 | Bacia Metropolitana | -0.63 | 0.5 | 0.07 | -4.50 | -39.00 | 1981 | 01 |
Utilizaremos o Pandas Profiling para obter estatisticas sobre as variaveis, interaçoes entre essas, correlaçoes e analise de dados faltantes
profile = ProfileReport(df[df['data']>'2010'], title="Pandas Profiling Report")
# Gera o relatorio dentro do notebook
profile.to_notebook_iframe()
# Gera um arquivo html do relatorio
profile.to_file("df_treino_profile_report.html")
Summarize dataset: 0%| | 0/5 [00:00<?, ?it/s]
Generate report structure: 0%| | 0/1 [00:00<?, ?it/s]
Render HTML: 0%| | 0/1 [00:00<?, ?it/s]